﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using VentaPorCatalogos.UserControls;
using BLL;
using BE;
using BE.SearchCriteria;
using System.Text;
using BLL.Exceptions;

namespace VentaPorCatalogos.Pages
{
    public partial class Vendedores : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ViewState.Add("FormBehavior", behavior.Initial);
                Session["SearchCriteria"] = null;
                Session["Model"] = null;
            }
        }

        protected void Page_PreRender(object sender, EventArgs e)
        {
            ConfigurarFormBehaviour();
        }

        #region "Buttons"

     

        #endregion
        protected void botComandos_OnBotonClick(object sender, BotoneraEventArgs e)
        {
            try
            {
                VendedorBE oVendedorBE = new VendedorBE();
                behavior wComportamiento;

                switch (e.Boton)
                {
                    case BotonesTipos.Buscar:
                        if (BuscarElemento())
                            SetFormBehaviour(behavior.View);
                        else
                            e.CancelarOperacion = true;  // Evita que la botonera pase a modo consulta, si no se encontró un elemento.                        
                        break;

                    case BotonesTipos.Nuevo:
                        SetFormBehaviour(behavior.New);
                        HabilitarControles(true, divCampos.Controls);
                        BlanquearControles(divCampos.Controls);
                        break;

                    case BotonesTipos.Editar:
                        SetFormBehaviour(behavior.Edit);
                        HabilitarControles(true, divCampos.Controls);
                        break;

                    case BotonesTipos.Eliminar:
                        VendedorBLL.Delete(GetModel<VendedorBE>());
                        SetModel<VendedorBE>(null);
                        SetFormBehaviour(behavior.Initial);
                        break;

                    case BotonesTipos.Aceptar:
                        wComportamiento = (behavior)ViewState["FormBehavior"];                        
                        LeerDatosDesdeControles(oVendedorBE);

                        switch (wComportamiento)
                        {
                            case behavior.New:
                                VendedorBLL.Insertar(oVendedorBE);
                                hidIdElemento.Value = oVendedorBE.IdVendedor.ToString();
                                BuscarElemento();
                                MostrarMensaje("Vendedor registrado correctamente");
                                break;
                            case behavior.Edit:                                
                                VendedorBLL.Modificar(oVendedorBE);
                                MostrarMensaje("Vendedor modificado correctamente");
                                break;
                        }                        
                        SetFormBehaviour(behavior.View);
                        break;
                    case BotonesTipos.Cancelar:
                        wComportamiento = GetFormBehaviour();
                        switch (wComportamiento)
                        {
                            case behavior.Edit:
                                BuscarElemento();
                                SetFormBehaviour(behavior.View);
                                break;
                            case behavior.New:
                                BlanquearControles(divCampos.Controls);
                                SetFormBehaviour(behavior.Initial);
                                break;
                            default:
                                break;
                        }                        
                        break;

                    default:
                        break;
                }
            }
            catch (BLLException bllEx)
            {
                MostrarMensaje(bllEx.Message);
            }
            catch (Exception ex)
            {
                MostrarMensaje(ex.Message);
            }
        }

        private void LeerDatosDesdeControles(VendedorBE oVendedorBE)
        {
            int resultado;
            if (int.TryParse(lblIdVendedor.Text, out resultado))
                oVendedorBE.IdVendedor = resultado;
            oVendedorBE.Apellido = txtApellido.Text;
            oVendedorBE.Nombre = txtNombre.Text;
            oVendedorBE.TipoDocumento = cmbTipoDocumento.Value;
            oVendedorBE.NroDocumento = txtNroDocumento.Text;
            
            oVendedorBE.oBarrioBE = new BarrioBE();
            if (int.TryParse(hidIdBarrio.Value, out resultado))
                oVendedorBE.oBarrioBE.IdBarrio = resultado;

            DateTime resultadoDate;
            if (DateTime.TryParse(txtFechaNacimiento.Text, out resultadoDate))
                oVendedorBE.FechaNacimiento = resultadoDate;
            oVendedorBE.Email = txtEmail.Text;
            oVendedorBE.Telefono = txtTelefono.Text;
            oVendedorBE.PisoDpto = txtPisoDpto.Text;
            oVendedorBE.oCalleBE = new CalleBE();
            if (int.TryParse(hidIdCalle.Value, out resultado))
                oVendedorBE.oCalleBE.IdCalle = resultado;
            if (int.TryParse(txtNroCalle.Text, out resultado))
                oVendedorBE.NroCalle = resultado;
            oVendedorBE.oAreaBE = new AreaBE();
            if (int.TryParse(hidIdArea.Value, out resultado))
                oVendedorBE.oAreaBE.IdArea = resultado;
            oVendedorBE.Activo = chkActivo.Checked;
            oVendedorBE.Deudor = chkDeudor.Checked; 

        }

        protected void btnSelCalle_Click(object sender, ImageClickEventArgs e)
        {
            int wCount = 0;

            if (txtCalle.Text.Trim().Length > 0)
            {
                CalleSC wFiltroSC = new CalleSC();
                wFiltroSC.Descripcion = txtCalle.Text;
                List<CalleBE> wListResultado = CalleBLL.SeleccionarTodos(wFiltroSC, 0, null, ref wCount);
                if (wListResultado != null && wListResultado.Count > 0)
                {
                    if (wListResultado.Count == 1)
                    {
                        hidIdCalle.Value = wListResultado[0].IdCalle.ToString();
                        txtCalle.Text = wListResultado[0].Descripcion;
                    }
                    else
                        EjecutarScript(string.Format("SeleccionarCalle(\"{0}\");", txtCalle.Text));
                }
                else
                {
                    txtCalle.Text = string.Empty;
                    EjecutarScript("alert(\"Sin resultados para el filtro especificado.\");");
                }
            }
            else
            {
                EjecutarScript(string.Format("SeleccionarCalle(\"{0}\");", txtCalle.Text));
            }

        }

        protected void btnSelZona_Click(object sender, ImageClickEventArgs e)
        {
            int wCount = 0;

            if (txtZona.Text.Trim().Length > 0)
            {
                ZonaSC wFiltroSC = new ZonaSC();
                wFiltroSC.Descripcion = txtZona.Text;
                List<ZonasBE> wListResultado = ZonaBLL.SeleccionarTodos(wFiltroSC, 0, null, ref wCount);
                if (wListResultado != null && wListResultado.Count > 0)
                {
                    if (wListResultado.Count == 1)
                    {
                        hidIdZona.Value = wListResultado[0].IdZona.ToString();
                        txtZona.Text = wListResultado[0].Descripcion;
                    }
                    else
                        EjecutarScript(string.Format("SeleccionarZona(\"{0}\");", txtZona.Text));
                }
                else
                {
                    txtZona.Text = string.Empty;
                    EjecutarScript("alert(\"Sin resultados para el filtro especificado.\");");
                }
            }
            else
            {
                EjecutarScript(string.Format("SeleccionarZona(\"{0}\");", txtZona.Text));
            }
        }

        protected void btnSelArea_Click(object sender, ImageClickEventArgs e)
        {
            int wCount = 0;

            if (txtArea.Text.Trim().Length > 0)
            {
                AreaSC wFiltroSC = new AreaSC();
                wFiltroSC.Descripcion = txtArea.Text;
                List<AreaBE> wListResultado = AreaBLL.SeleccionarTodos(wFiltroSC, 0, null, ref wCount);
                if (wListResultado != null && wListResultado.Count > 0)
                {
                    if (wListResultado.Count == 1)
                    {
                        hidIdArea.Value = wListResultado[0].IdArea.ToString();
                        txtArea.Text = wListResultado[0].Descripcion;
                    }
                    else
                        EjecutarScript(string.Format("SeleccionarArea(\"{0}\");", txtArea.Text + "|" + hidIdZona.Value));
                }
                else
                {
                    txtArea.Text = string.Empty;
                    EjecutarScript("alert(\"Sin resultados para el filtro especificado.\");");
                }
            }
            else
            {
                EjecutarScript(string.Format("SeleccionarArea(\"{0}\");", txtArea.Text + "|" + hidIdZona.Value));
            }
        }


        protected void btnSelBarrio_Click(object sender, ImageClickEventArgs e)
        {
            int wCount = 0;

            if (txtBarrio.Text.Trim().Length > 0)
            {
                BarrioSC wFiltroSC = new BarrioSC();
                wFiltroSC.Descripcion = txtBarrio.Text;
                List<BarrioBE> wListResultado = BarrioBLL.SeleccionarTodos(wFiltroSC, 0, null, ref wCount);
                if (wListResultado != null && wListResultado.Count > 0)
                {
                    if (wListResultado.Count == 1)
                    {
                        hidIdBarrio.Value = wListResultado[0].IdBarrio.ToString();
                        txtBarrio.Text = wListResultado[0].Descripcion;
                    }
                    else
                        EjecutarScript(string.Format("SeleccionarBarrio(\"{0}\");", txtBarrio.Text));
                }
                else
                {
                    txtBarrio.Text = string.Empty;
                    EjecutarScript("alert(\"Sin resultados para el filtro especificado.\");");
                }
            }
            else
            {
                EjecutarScript(string.Format("SeleccionarBarrio(\"{0}\");", txtBarrio.Text));
            }

            
        }

        private void ConfigurarFormBehaviour()
        {
            behavior wComportamiento;
            wComportamiento = GetFormBehaviour();
            switch (wComportamiento)
            {
                case behavior.Initial:
                    HabilitarControles(false, divCampos.Controls);
                    break;

                case behavior.New:
                    break;

                case behavior.Edit:                    
                    break;

                case behavior.View:
                    HabilitarControles(false, divCampos.Controls);
                    break;
            }
        }

        private bool BuscarElemento()
        {
            try
            {                
                int id;
                if (!int.TryParse(hidIdElemento.Value, out id))
                    return false;

                VendedorBE oVendedorBE = new VendedorBE();
                oVendedorBE.IdVendedor = id;

                oVendedorBE = VendedorBLL.SeleccionarPorId(oVendedorBE);
                if (oVendedorBE == null)
                    return false;

                SetModel<VendedorBE>(oVendedorBE);

                // Mostrar datos del vendedor
                lblIdVendedor.Text = oVendedorBE.IdVendedor.ToString();
                txtApellido.Text = oVendedorBE.Apellido;
                txtNombre.Text = oVendedorBE.Nombre;
                cmbTipoDocumento.Value = oVendedorBE.TipoDocumento;
                txtNroDocumento.Text = oVendedorBE.NroDocumento;
                if (oVendedorBE.oBarrioBE != null)
                {
                    hidIdBarrio.Value = oVendedorBE.oBarrioBE.IdBarrio.ToString();
                    txtBarrio.Text = oVendedorBE.oBarrioBE.Descripcion;
                }
                txtFechaNacimiento.Text = oVendedorBE.FechaNacimiento.ToString("dd/MM/yyyy");
                txtEmail.Text = oVendedorBE.Email;
                txtTelefono.Text = oVendedorBE.Telefono;
                txtPisoDpto.Text = oVendedorBE.PisoDpto; ;

                if (oVendedorBE.oCalleBE != null)
                {
                    hidIdCalle.Value = oVendedorBE.oCalleBE.IdCalle.ToString();
                    txtCalle.Text = oVendedorBE.oCalleBE.Descripcion;
                }
                txtNroCalle.Text = oVendedorBE.NroCalle.ToString(); ;

                if (oVendedorBE.oAreaBE != null)
                {
                    hidIdArea.Value = oVendedorBE.oAreaBE.IdArea.ToString();
                    txtArea.Text = oVendedorBE.oAreaBE.Descripcion;

                    if (oVendedorBE.oAreaBE.oZonaBE != null)
                    {
                        hidIdZona.Value = oVendedorBE.oAreaBE.oZonaBE.IdZona.ToString();
                        txtZona.Text = oVendedorBE.oAreaBE.oZonaBE.Descripcion;
                    }
                }
                chkActivo.Checked = oVendedorBE.Activo;
                chkDeudor.Checked = oVendedorBE.Deudor; 

                return true;
            }
            catch (Exception)
            {
                throw;
            }            
        }

        
    }
}